Software applications rely on the file systems management component of the operating system to provide access to the executable code of the application. Typically the generalized operating system's controls are used to manage the actual functions performed on the files comprising this codebase. While these generalized controls are sufficient for most uses required by the file management clients, there is a significant gap in managing executable files for the highly scalable, multi-instance software systems used in the modern web-enabled technologies, especially those utilizing dynamic languages.
Highly scalable multi-instance dynamic language applications create specific demands on the file system and the operating system as a whole. The scalability requirement often dictated that the applications span hundreds to thousands of physical or virtual hosts, each with its own copy of the operating system, to achieve the capacity demands. Multi-instance form of deployment requires that a number of copies of the code, possible with a range of alterations, be executed in parallel across the previously described cluster of nodes. Finally, the dynamic nature of the language and the application presents a challenge that the code is read, executed (and even potentially modified and written back to the file system by the application) on every invocation. Due to these requirements the default function of the file system presents clear challenges in sharing, redundancy, speed of execution and the amount of storage required for efficiently servicing this type of application.
One of the popular models of delivering modern computer software is a Cloud-base, infrastructure. Cloud infrastructure is generally mapped to three layers: infrastructure components (servers, virtual machines, operating systems, etc.), platform components (data access queues, databases, file stores, etc.) and software (applications). Cloud software delivery component (also knows as SaaS or Software as a Service) presents an application that runs utilizing the network, hardware and systems software of the provider of the service and the user accesses it via the network (most typically over http(s) protocol). This frequently employs many users of the same software, implementing the same service, using the same provider.
In order to achieve the desired scale the software can be then deployed in either a multi-tenant configuration (all users share the same application) or multi-instance configuration (customers are mapped logically to a specific version of the application based on an arbitrary condition such as company affiliation and many instances of a given application are deployed). The multi-instance deployment allows the provider to enable customers with higher level of control, flexibility and customizability with respect to their application. In order to ensure the latter some clients will require extensive customization of their service software, to the point where the same installation of the application is unable to serve the needs of all customers, and different modifications of the application, including code modified according to the user preferences, is necessary.
Similar needs arise when logical isolation of systems is required in order to comply with a variety of security modes in a virtualized environments or when the software has self-generation capabilities, which modifies codebase dynamically throughout the execution process.
Traditional way of addressing these issues involved deploying multiple versions of software—each with its own codebase, execution stack and frequently execution process. This method satisfied the basic requirements for code customization and logical code segregation, however it created resource overhead in hardware, processing, labor and costs. Thus in order to save costs, it is a frequent scenario that the provider is running the software for multiple clients on a shared set of hardware, thus reducing the hardware costs. However, when the copies of the software are differentiated as described above, each of them has to be treated as separate piece of software, and has to be allocated disk space, memory space, etc. for its function. This creates high marginal costs for adding a new user to the system and leads to suboptimal utilization of the hardware resources.
Thus, it is desirable to allow the provider to run multiple instances of the computer software that share significant portions of the software metadata and code via the multi-instance share-what-is-possible system. By using this system, SaaS providers can significantly reduce their marginal cost of creating a copy of the software for each additional user, while still allowing to customize it independently from other copies according to user requirements.